Guard three x86-only assumptions so Omarchy can install on aarch64 - #8039
Open
oceanapplications wants to merge 2 commits into
Open
Guard three x86-only assumptions so Omarchy can install on aarch64#8039oceanapplications wants to merge 2 commits into
oceanapplications wants to merge 2 commits into
Conversation
Each of these is an unconditional assumption that only holds on x86_64. None
is x86-specific in spirit, and each one blocks or breaks an ARM64 install.
1. etc/mkinitcpio.conf.d/thunderbolt_module.conf
MODULES+=(thunderbolt) is unconditional, but Thunderbolt is x86-oriented
hardware and the module is not built for every architecture -- Arch Linux
ARM's aarch64 kernel has no `thunderbolt`. mkinitcpio treats an unresolvable
MODULES entry as a hard error, so *every* initramfs build fails:
==> ERROR: module not found: `thunderbolt'
That means no UKI, no boot entry, and an install that completes and then
cannot boot.
2. install/post-install/pacman.sh
This overwrites /etc/pacman.conf unconditionally. That config points
[core]/[extra]/[multilib] at Omarchy's mirror of Arch, which is x86_64-only,
and [omarchy] at pkgs.omarchy.org/stable/$arch, which 404s for aarch64.
([multilib] is 32-bit x86 libraries and exists on no ARM mirror at all.)
Applying it on ARM leaves the installed system unable to update anything.
3. install/user/mise-work.sh
Node publishes its builds as linux-x64 / linux-arm64, which does not match
uname -m. The bundled-tarball lookup hardcodes linux-x64, so on ARM it finds
nothing and the install aborts with "no bundled Node tarball". The sed that
parses the version back out of the filename needs the same treatment.
All three were found by installing Omarchy on aarch64 (Arch Linux ARM) and are
fixed here the same way: derive from uname -m rather than assuming.
Contributor
There was a problem hiding this comment.
Pull request overview
Enables Omarchy installation on aarch64 while preserving x86_64 behavior.
Tip
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or run gh pr ready --undo.
Click "Ready for review" or run gh pr ready to reengage.
Changes:
- Skips x86-only pacman configuration and Thunderbolt module loading on ARM64.
- Maps aarch64 to Node’s
arm64tarball naming.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
install/user/mise-work.sh |
Selects and parses architecture-specific Node bundles. |
install/post-install/pacman.sh |
Preserves ARM-compatible pacman configuration. |
etc/mkinitcpio.conf.d/thunderbolt_module.conf |
Loads Thunderbolt only on x86_64. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
This was referenced Aug 24, 2026
This was referenced Aug 25, 2026
Decide: Snapdragon hardware directory and detection in the main omarchy repo
JimmayVV/omarchy-iso#14
Closed
JimmayVV
added a commit
to JimmayVV/omarchy-pkgs
that referenced
this pull request
Aug 26, 2026
JimmayVV/omarchy@snapdragon is upstream PR omacom/omarchy#8039 plus the install/hardware/qualcomm layer. Both packages move together (the settings package ships the guarded thunderbolt drop-in the aarch64 UKI build needs), pkgrel 1.1 marks the deviation the way .omarchy/patches do for AUR packages.
The previous guard skipped the pacman.conf restore on aarch64 on the grounds that Omarchy's config points at x86-only repositories. But at that point the target still carries the live ISO's pacman.conf, which knows only the offline mirror, and that directory does not exist on the installed system. Skipping therefore left every aarch64 install unable to run pacman at all, which is the outcome the guard claimed to prevent. Derive the config from Omarchy's template instead: drop [multilib], keep [omarchy] (its $arch placeholder resolves correctly), add Arch Linux ARM's [alarm] and [aur] repositories, and leave the mirrorlist the distribution installed rather than replacing it with Omarchy's x86_64 mirror of Arch. The x86_64 path is unchanged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three unconditional assumptions in the install path only hold on x86_64. None is
x86-specific in spirit, and each one blocks or breaks an ARM64 install. All three were
found by actually installing Omarchy on aarch64 (Arch Linux ARM) and are fixed the same
way: derive from
uname -minstead of assuming.1.
etc/mkinitcpio.conf.d/thunderbolt_module.confMODULES+=(thunderbolt)is unconditional, but Thunderbolt is x86-oriented hardware and themodule isn't built for every architecture. ALARM's aarch64 kernel has no
thunderbolt, andmkinitcpio treats an unresolvable
MODULESentry as a hard error, so every initramfsbuild fails:
No initramfs means no UKI, no boot entry, and an install that completes and then can't boot.
Because bootloader setup is the last phase, the failure surfaces as "no operating system
installed" at the firmware, which points at the wrong end of the process entirely.
2.
install/post-install/pacman.shThis overwrites
/etc/pacman.confand the mirrorlist unconditionally with files thatdescribe an x86_64 Arch system:
[multilib]is 32-bit x86 libraries and exists on no ARMmirror, and the mirrorlist points at Omarchy's mirror of Arch, which is x86_64 only. Arch
Linux ARM also lays its tree out as
$arch/$reporather than Arch's$repo/os/$arch, sothe mirrorlist can't simply be pointed at a different host.
The first revision of this PR skipped the restore on aarch64. That was wrong: at this point
the target still carries the live ISO's
pacman.conf, which knows only the offline mirror,and that directory doesn't exist on the installed system. Skipping left every aarch64
install unable to run pacman at all.
This revision derives the config from Omarchy's template instead: drop
[multilib], keep[omarchy](its$archplaceholder resolves correctly), add ALARM's[alarm]and[aur]repositories, and leave the mirrorlist the distribution installed. The
[options]blockand everything else in the template come through unchanged, so
OMARCHY_MIRRORstillselects stable/edge/rc as it does on x86.
3.
install/user/mise-work.shNode publishes its builds as
linux-x64/linux-arm64, which does not matchuname -m. The bundled-tarball lookup hardcodeslinux-x64, so on ARM it finds nothing andthe install aborts:
The
sedthat parses the version back out of the filename needs the same treatment,otherwise it silently yields the whole filename instead of the version.
Testing
On Arch Linux ARM aarch64, natively rather than under emulation:
Each guard, both branches.
thunderbolt_module.confsourced withuname -mfaked toeach architecture yields
MODULES=(thunderbolt)on x86_64 and empty on aarch64, and areal
mkinitcpiorun with the guarded file succeeds on a kernel without the module.mise-work.sh's lookup andsedwere run againstnode-v24.7.0-linux-{x64,arm64}.tar.gzunder both architectures; each finds its own tarball and extracts
24.7.0, and theupstream x86
sedgives the same answer on the x64 file.pacman.sh, sandboxed, all three mirrors. With/etcredirected, the script was runfor
stable,edgeandrcon aarch64:[multilib]gone,[options]byte-identical tothe template, the mirrorlist untouched, and
pacman-conf --repo-listparses the result ascore extra omarchy alarm aur. Withuname -mfaked to x86_64 the output isbyte-identical to the plain
cpof both files. A livepacman -Syagainst the stableoutput synced
core,extra,alarmandaurfrom ALARM's mirror; onlyomarchyfailed, with the 404 described above.
Full install.
omarchyandomarchy-settingspackages built from this branch wentinto an ISO (Build the ISO for the host architecture, adding aarch64 support omarchy-iso#121), which installed to an encrypted target and
booted unattended into the desktop. On the installed system
/etc/pacman.confis thederived one, the mirrorlist is the one ALARM's
pacman-mirrorlistinstalled, andpacman -Sysyncscore,extra,alarmandaurwith no errors; the only failure isomarchy.db, the 404 described above.The first run of this test also showed the installer prepending three x86 Arch mirrors to
the target's mirrorlist, so every sync walked through a dozen 404s before reaching ALARM's.
That is the ISO's configurator, not this repository, and is fixed in omarchy-iso#121.
All three files pass
bash -nand ShellCheck. No behaviour change on x86_64: each guardtakes the existing path there, and
pacman.sh's x86_64 branch is the unchanged two-line copy.